/**
 * Prompt Templates for Chat吉PT userscript.
 * Defines common prompt templates for various AI operations.
 */

/**
 * Code debugging prompt template
 * @param {string} languageType - Programming language type
 * @returns {string} - Debugging prompt template
 */
export function debuggingPrompt(languageType) {
  return `你是代码领域的专家，以下是${languageType}代码，请提供专业代码级别的分析或建议，简洁易于理解。
我需要你帮我找出代码中的错误，并给出修复建议。请详细说明错误原因和修复方案。`;
}

/**
 * Code optimization prompt template
 * @param {string} languageType - Programming language type
 * @returns {string} - Optimization prompt template
 */
export function optimizationPrompt(languageType) {
  return `你是代码领域的专家，以下是${languageType}代码，请提供专业代码级别的分析或建议，简洁易于理解。
请帮我优化这段代码，提高执行效率、可读性和可维护性。可以从算法复杂度、代码结构、命名规范等多方面给出建议。`;
}

/**
 * Code explanation prompt template
 * @param {string} languageType - Programming language type
 * @returns {string} - Explanation prompt template
 */
export function explanationPrompt(languageType) {
  return `你是代码领域的专家，以下是${languageType}代码，请提供专业代码级别的分析或建议，简洁易于理解。
请详细解释这段代码的功能和实现原理，包括核心逻辑、算法思路和关键部分的具体作用。`;
}

/**
 * Comment generation prompt template
 * @param {string} languageType - Programming language type
 * @returns {string} - Comment generation prompt template
 */
export function commentPrompt(languageType) {
  return `你是代码领域的专家，以下是${languageType}代码，请提供专业代码级别的分析或建议，简洁易于理解。
请为这段代码添加全面的注释，使其更易于理解和维护。注释应包括函数用途、参数说明、返回值、实现逻辑等关键信息。`;
}

/**
 * API explanation prompt template
 * @param {string} languageType - Programming language type
 * @returns {string} - API explanation prompt template
 */
export function apiExplanationPrompt(languageType) {
  return `你是代码领域的专家，以下是${languageType}代码，请提供专业代码级别的分析或建议，简洁易于理解。
请详细解释这段代码中使用的API，包括各API的功能、参数、返回值以及使用场景。如果可能，也请提供一些实用的示例代码，须使用jsdoc加上类型注释。`;
}

/**
 * Function refactoring prompt template
 * @param {string} languageType - Programming language type
 * @returns {string} - Function refactoring prompt template
 */
export function refactoringPrompt(languageType) {
  return `你是代码领域的专家，以下是${languageType}代码，请提供专业代码级别的分析或建议，简洁易于理解。
请帮我重构这个较长的函数，将其分解为多个小函数，提高代码的可读性和可维护性。保持原有功能不变，须使用jsdoc加上类型注释。`;
}

/**
 * Code structure analysis prompt template
 * @param {string} languageType - Programming language type
 * @returns {string} - Code structure analysis prompt template
 */
export function structureAnalysisPrompt(languageType) {
  return `你是代码领域的专家，以下是${languageType}代码，请提供专业代码级别的分析或建议，简洁易于理解。
请分析这段代码的结构，包括模块划分、函数间的依赖关系、数据流向等。如有可能，你可以建议更合理的结构组织方式，须使用jsdoc加上类型注释。`;
}

/**
 * Error fix prompt template
 * @param {string} languageType - Programming language type
 * @returns {string} - Error fix prompt template
 */
export function errorFixPrompt(languageType) {
  return `你是代码领域的专家，以下是${languageType}代码，请提供专业代码级别的分析或建议，简洁易于理解。
这是一段报错的代码，错误信息在双引号内。请帮我修复这个错误，并解释错误原因。最后给出完整的修复好的代码，须使用jsdoc加上类型注释。`;
}

/**
 * Custom question prompt template
 * @param {string} languageType - Programming language type
 * @returns {string} - Custom question prompt template
 */
export function customQuestionPrompt(languageType) {
  return `你是代码领域的专家，以下是${languageType}代码，请提供专业代码级别的分析或建议，简洁易于理解。
我有一个关于这段代码的问题，请根据我的描述提供专业的解答和建议，须使用jsdoc加上类型注释。`;
}

/**
 * Error explanation prompt template
 * @returns {string} - Error explanation prompt template
 */
export function errorExplanationPrompt() {
  return `你是代码领域的专家，请简明扼要地帮我分析这个JavaScript错误。

请按以下步骤进行：
1. 简洁解释错误的本质原因
2. 提出1-2个可能的修复方案
3. 如果可能，提供一个简短的代码示例

保持回答简洁、专业、易于理解。须使用jsdoc加上类型注释。`;
}

/**
 * Get prompt template based on type
 * @param {number} type - The prompt type ID
 * @returns {string} - The appropriate prompt template
 */
export function getPromptByType(type) {
  switch (type) {
    case 1:
      return debuggingPrompt("JavaScript");
    case 2:
      return optimizationPrompt("JavaScript");
    case 3:
      return explanationPrompt("JavaScript");
    case 6:
      return commentPrompt("JavaScript");
    case 8:
      return apiExplanationPrompt("JavaScript");
    case 13:
      return refactoringPrompt("JavaScript");
    case 14:
      return structureAnalysisPrompt("JavaScript");
    case 90:
      return errorFixPrompt("JavaScript");
    case "explain_error":
      return errorExplanationPrompt();
    case 200:
    default:
      return customQuestionPrompt("JavaScript");
  }
}
